# 抖码算法，让算法学习变得简单有趣
# 作者：老汤


def index(num, top, nums):
    """
    在 nums 中从索引 0 开始一直到 top - 1位置，看看有没有累加和等于 num 的情况
    如果有的话，返回起始索引

    比如 num = 3, top = 3, nums = [6, 1, 2, 3]
    因为 1 + 2 = 3，所以返回 1 的索引 1
    """
    sum_ = 0
    for j in range(top - 1, -1, -1):
        sum_ += nums[j]
        if sum_ == num:
            return j
    return -1


data = str(input()).split(" ")
nums = [0] * len(data)
for i in range(len(data)):
    nums[i] = int(data[i])

# 这里直接使用数组来模拟栈
# top 表示栈顶
top = 1
# 从第二个元素开始，因为第一个元素肯定需要放到栈里的
for i in range(1, len(data)):
    # num 表示即将压入栈的元素值
    num = nums[i]
    # 不断的判断是否存在累加和等于 num 的起始索引
    start = index(num, top, nums)
    while start != -1:
        num, top = 2 * num, start
        start = index(num, top, nums)

    nums[top], top = num, top + 1

for i in range(top - 1, -1, -1):
    if i == 0:
        print(nums[i], end="")
    else:
        print(str(nums[i]) + " ", end="")